{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Imports\n",
    "\n",
    "Import all the modules and functionalities we need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "# Import standard libraries.\n",
    "import os\n",
    "\n",
    "# Import third party libraries.\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from statsmodels.stats.multitest import multipletests\n",
    "\n",
    "# Import custom libraries/scripts.\n",
    "import annotations\n",
    "import helpers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loading data\n",
    "\n",
    "Fetch all our relevant data for the current analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set working contants.\n",
    "EXPERIMENTS_PATHS = [r'\\\\10.40.12.80\\home\\PhD\\Results\\Competition\\DL\\small_arenas\\WT_mating_pairs\\processed',\n",
    "                     r'\\\\10.40.12.80\\home\\PhD\\Results\\Competition\\DL\\small_arenas\\two_females_only\\processed'\n",
    "                    ]\n",
    "FPS = 60\n",
    "N_MINUTES = 60\n",
    "N_FRAMES = N_MINUTES * 60 * FPS\n",
    "INK = 'black'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set figure configurations.\n",
    "sns.set(\n",
    "        context='paper',\n",
    "        style='ticks',\n",
    "        font='sans-serif',\n",
    "        font_scale=1.0, \n",
    "        rc={\n",
    "            'axes.axisbelow': True,\n",
    "            'axes.edgecolor': INK,\n",
    "            'axes.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'axes.grid': False,\n",
    "            'axes.labelcolor': INK,\n",
    "            'axes.labelsize': 13.0,\n",
    "            'axes.labelweight': 'normal',\n",
    "            'axes.linewidth': 1.0,\n",
    "            'axes.spines.left': True,\n",
    "            'axes.spines.bottom': True,\n",
    "            'axes.spines.top': False,\n",
    "            'axes.spines.right': False,\n",
    "            'axes.titlepad': 15.0,\n",
    "            'axes.titlesize': 20.0,\n",
    "            'axes.titleweight': 'bold',\n",
    "            'figure.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'figure.figsize': [6.0, 4.0],\n",
    "            'figure.titlesize': 30.0,\n",
    "            'figure.titleweight': 'bold',\n",
    "            'font.family': ['sans-serif'],\n",
    "            'font.sans-serif': ['Arial'],\n",
    "            'legend.frameon': False,\n",
    "            'legend.fontsize': 11.0,\n",
    "            'lines.color': INK,\n",
    "            'lines.linewidth': 1.0,\n",
    "            'patch.edgecolor': INK,\n",
    "            'savefig.dpi': 300,\n",
    "            'savefig.format': 'png',\n",
    "            'savefig.bbox': 'tight',\n",
    "            'savefig.transparent': True,\n",
    "            'text.color': INK,\n",
    "            'text.usetex': False,\n",
    "            'xtick.color': INK,\n",
    "            'xtick.direction': 'out',\n",
    "            'xtick.labelsize': 12.0,\n",
    "            'xtick.major.pad': 5.0,\n",
    "            'xtick.major.size': 0.0,\n",
    "            'xtick.major.width': 1.0,\n",
    "            'xtick.minor.size': 0.0,\n",
    "            'xtick.minor.width': 0.4,\n",
    "            'ytick.color': INK,\n",
    "            'ytick.direction': 'out',\n",
    "            'ytick.labelsize': 12.0,\n",
    "            'ytick.major.pad': 5.0,\n",
    "            'ytick.major.size': 3.0,\n",
    "            'ytick.major.width': 1.0,\n",
    "            'ytick.minor.size': 0.0,\n",
    "            'ytick.minor.width': 0.4\n",
    "           }\n",
    "       )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Folder already exists, skipping.\n"
     ]
    }
   ],
   "source": [
    "# Prepare the Figures folder to save our graphs in.\n",
    "savepath = os.path.join(r'C:\\Users\\Miguel\\Desktop\\paper_data', 'paper_figures', 'figureS3')\n",
    "try:\n",
    "    os.makedirs(savepath)\n",
    "    print('New folder created.')\n",
    "except FileExistsError:\n",
    "    print('Folder already exists, skipping.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Paths to conditions:\n",
      " ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food', '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food', '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food', '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food']\n"
     ]
    }
   ],
   "source": [
    "# Set the conditions to analyze.\n",
    "condition_order = ['food', 'no_food']\n",
    "conditions = []\n",
    "for PATH in EXPERIMENTS_PATHS:\n",
    "    conditions.append([item.path for item in os.scandir(PATH) if item.name in condition_order])\n",
    "\n",
    "conditions = list(np.concatenate(conditions).flat)\n",
    "print('Paths to conditions:\\n', conditions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\t\n",
      " food\n",
      "\t\n",
      " no_food\n",
      "\t\n",
      " food\n",
      "\t\n",
      " no_food\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'food_mating_pairs': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-11-27T10_50_09_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-05T11_29_29_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-06T10_32_06_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-06T10_32_06_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-06T10_32_06_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\food\\\\video_2019-12-06T10_32_06_arena8.csv'],\n",
       " 'no_food_mating_pairs': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T10_28_30_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T11_29_29_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T11_29_29_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T11_29_29_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T11_29_29_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-05T11_29_29_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-06T10_32_06_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-06T10_32_06_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-06T10_32_06_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-06T10_32_06_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\WT_mating_pairs\\\\processed\\\\no_food\\\\video_2019-12-06T10_32_06_arena16.csv'],\n",
       " 'food_females': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T10_41_16_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-12T11_37_33_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_01_30_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T10_57_35_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\food\\\\video_2019-12-18T11_55_14_arena9.csv'],\n",
       " 'no_food_females': ['\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T10_41_16_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-12T11_37_33_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena1.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena2.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena5.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena6.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_01_30_arena8.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena10.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena13.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena14.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T10_57_35_arena9.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena11.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena12.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena15.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena16.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena3.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena4.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena7.csv',\n",
       "  '\\\\\\\\10.40.12.80\\\\home\\\\PhD\\\\Results\\\\Competition\\\\DL\\\\small_arenas\\\\two_females_only\\\\processed\\\\no_food\\\\video_2019-12-18T11_55_14_arena8.csv']}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load all usable experiments for each condition.\n",
    "experiments = {'food_mating_pairs': [],\n",
    "               'no_food_mating_pairs': [],\n",
    "               'food_females': [],\n",
    "               'no_food_females': []\n",
    "              }\n",
    "\n",
    "for condition_path in conditions:\n",
    "\n",
    "    condition = os.path.basename(condition_path)\n",
    "    print('\\t\\n', condition)\n",
    "\n",
    "    for item in os.scandir(condition_path):\n",
    "        if item.name.endswith('.csv'):\n",
    "            \n",
    "            annotation_video = annotations.read(item.path)\n",
    "            \n",
    "            if 'WT' in item.path:\n",
    "            \n",
    "                try:\n",
    "                    copulation = annotation_video[0].events[0]\n",
    "\n",
    "                    # Filter out videos where copulation is interrupted.\n",
    "                    copulation_end = copulation.time_interval[1]\n",
    "                    if copulation_end==N_FRAMES:\n",
    "                        print('Copulation interrupted:', item.name)\n",
    "                        continue\n",
    "\n",
    "                    # Filter out videos where copulation lasts less than 8 minutes.\n",
    "                    copulation_duration = copulation.duration\n",
    "                    if copulation_duration <= 8 * 60 * FPS:\n",
    "                        print('Copulation too short:', item.name)\n",
    "                        continue\n",
    "\n",
    "                except IndexError:\n",
    "                    continue\n",
    "\n",
    "                experiments[condition + '_mating_pairs'].append(item.path)\n",
    "                \n",
    "            else:\n",
    "                \n",
    "                experiments[condition + '_females'].append(item.path)\n",
    "\n",
    "experiments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Aggression Analysis (First 5 Minutes ONLY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration: 0 \n",
      "Experiment: video_2019-11-27T10_50_09_arena1.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2019-11-27T10_50_09_arena10.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2019-11-27T10_50_09_arena11.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2019-11-27T10_50_09_arena12.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2019-11-27T10_50_09_arena13.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2019-11-27T10_50_09_arena14.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2019-11-27T10_50_09_arena15.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2019-11-27T10_50_09_arena2.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2019-11-27T10_50_09_arena3.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2019-11-27T10_50_09_arena4.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2019-11-27T10_50_09_arena5.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2019-11-27T10_50_09_arena6.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2019-11-27T10_50_09_arena7.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2019-11-27T10_50_09_arena8.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2019-11-27T10_50_09_arena9.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2019-12-05T11_29_29_arena10.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2019-12-05T11_29_29_arena11.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2019-12-05T11_29_29_arena12.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2019-12-05T11_29_29_arena13.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2019-12-05T11_29_29_arena14.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2019-12-05T11_29_29_arena15.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2019-12-05T11_29_29_arena16.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2019-12-05T11_29_29_arena9.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2019-12-06T10_32_06_arena2.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2019-12-06T10_32_06_arena3.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2019-12-06T10_32_06_arena7.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2019-12-06T10_32_06_arena8.csv \n",
      "Condition: food_mating_pairs \n",
      "\n",
      "Iteration: 0 \n",
      "Experiment: video_2019-12-05T10_28_30_arena10.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2019-12-05T10_28_30_arena11.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2019-12-05T10_28_30_arena12.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2019-12-05T10_28_30_arena13.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2019-12-05T10_28_30_arena14.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2019-12-05T10_28_30_arena16.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2019-12-05T10_28_30_arena2.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2019-12-05T10_28_30_arena3.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2019-12-05T10_28_30_arena4.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2019-12-05T10_28_30_arena5.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2019-12-05T10_28_30_arena7.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2019-12-05T10_28_30_arena8.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2019-12-05T10_28_30_arena9.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2019-12-05T11_29_29_arena1.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2019-12-05T11_29_29_arena2.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2019-12-05T11_29_29_arena5.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2019-12-05T11_29_29_arena7.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2019-12-05T11_29_29_arena8.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2019-12-06T10_32_06_arena10.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2019-12-06T10_32_06_arena11.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2019-12-06T10_32_06_arena12.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2019-12-06T10_32_06_arena13.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2019-12-06T10_32_06_arena16.csv \n",
      "Condition: no_food_mating_pairs \n",
      "\n",
      "Iteration: 0 \n",
      "Experiment: video_2019-12-12T10_41_16_arena11.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2019-12-12T10_41_16_arena12.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2019-12-12T10_41_16_arena15.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2019-12-12T10_41_16_arena16.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2019-12-12T10_41_16_arena3.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2019-12-12T10_41_16_arena4.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2019-12-12T10_41_16_arena7.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2019-12-12T10_41_16_arena8.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2019-12-12T11_37_33_arena10.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2019-12-12T11_37_33_arena13.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2019-12-12T11_37_33_arena14.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2019-12-12T11_37_33_arena2.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2019-12-12T11_37_33_arena5.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2019-12-12T11_37_33_arena6.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2019-12-12T11_37_33_arena9.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2019-12-18T10_01_30_arena10.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2019-12-18T10_01_30_arena11.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2019-12-18T10_01_30_arena12.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2019-12-18T10_01_30_arena13.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2019-12-18T10_01_30_arena14.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2019-12-18T10_01_30_arena15.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2019-12-18T10_01_30_arena16.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2019-12-18T10_01_30_arena9.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2019-12-18T10_57_35_arena1.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2019-12-18T10_57_35_arena2.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2019-12-18T10_57_35_arena3.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2019-12-18T10_57_35_arena4.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 27 \n",
      "Experiment: video_2019-12-18T10_57_35_arena5.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 28 \n",
      "Experiment: video_2019-12-18T10_57_35_arena6.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 29 \n",
      "Experiment: video_2019-12-18T10_57_35_arena7.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 30 \n",
      "Experiment: video_2019-12-18T10_57_35_arena8.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 31 \n",
      "Experiment: video_2019-12-18T11_55_14_arena1.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 32 \n",
      "Experiment: video_2019-12-18T11_55_14_arena10.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 33 \n",
      "Experiment: video_2019-12-18T11_55_14_arena13.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 34 \n",
      "Experiment: video_2019-12-18T11_55_14_arena14.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 35 \n",
      "Experiment: video_2019-12-18T11_55_14_arena2.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 36 \n",
      "Experiment: video_2019-12-18T11_55_14_arena5.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 37 \n",
      "Experiment: video_2019-12-18T11_55_14_arena6.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 38 \n",
      "Experiment: video_2019-12-18T11_55_14_arena9.csv \n",
      "Condition: food_females \n",
      "\n",
      "Iteration: 0 \n",
      "Experiment: video_2019-12-12T10_41_16_arena1.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 1 \n",
      "Experiment: video_2019-12-12T10_41_16_arena10.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 2 \n",
      "Experiment: video_2019-12-12T10_41_16_arena13.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 3 \n",
      "Experiment: video_2019-12-12T10_41_16_arena14.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 4 \n",
      "Experiment: video_2019-12-12T10_41_16_arena2.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 5 \n",
      "Experiment: video_2019-12-12T10_41_16_arena5.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 6 \n",
      "Experiment: video_2019-12-12T10_41_16_arena6.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 7 \n",
      "Experiment: video_2019-12-12T10_41_16_arena9.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 8 \n",
      "Experiment: video_2019-12-12T11_37_33_arena11.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 9 \n",
      "Experiment: video_2019-12-12T11_37_33_arena12.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 10 \n",
      "Experiment: video_2019-12-12T11_37_33_arena15.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 11 \n",
      "Experiment: video_2019-12-12T11_37_33_arena16.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 12 \n",
      "Experiment: video_2019-12-12T11_37_33_arena3.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 13 \n",
      "Experiment: video_2019-12-12T11_37_33_arena4.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 14 \n",
      "Experiment: video_2019-12-12T11_37_33_arena7.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 15 \n",
      "Experiment: video_2019-12-12T11_37_33_arena8.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 16 \n",
      "Experiment: video_2019-12-18T10_01_30_arena1.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 17 \n",
      "Experiment: video_2019-12-18T10_01_30_arena2.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 18 \n",
      "Experiment: video_2019-12-18T10_01_30_arena3.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 19 \n",
      "Experiment: video_2019-12-18T10_01_30_arena4.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 20 \n",
      "Experiment: video_2019-12-18T10_01_30_arena5.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 21 \n",
      "Experiment: video_2019-12-18T10_01_30_arena6.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 22 \n",
      "Experiment: video_2019-12-18T10_01_30_arena7.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 23 \n",
      "Experiment: video_2019-12-18T10_01_30_arena8.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 24 \n",
      "Experiment: video_2019-12-18T10_57_35_arena10.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 25 \n",
      "Experiment: video_2019-12-18T10_57_35_arena11.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 26 \n",
      "Experiment: video_2019-12-18T10_57_35_arena12.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 27 \n",
      "Experiment: video_2019-12-18T10_57_35_arena13.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 28 \n",
      "Experiment: video_2019-12-18T10_57_35_arena14.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 29 \n",
      "Experiment: video_2019-12-18T10_57_35_arena15.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 30 \n",
      "Experiment: video_2019-12-18T10_57_35_arena16.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 31 \n",
      "Experiment: video_2019-12-18T10_57_35_arena9.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 32 \n",
      "Experiment: video_2019-12-18T11_55_14_arena11.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 33 \n",
      "Experiment: video_2019-12-18T11_55_14_arena12.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 34 \n",
      "Experiment: video_2019-12-18T11_55_14_arena15.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 35 \n",
      "Experiment: video_2019-12-18T11_55_14_arena16.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 36 \n",
      "Experiment: video_2019-12-18T11_55_14_arena3.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 37 \n",
      "Experiment: video_2019-12-18T11_55_14_arena4.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 38 \n",
      "Experiment: video_2019-12-18T11_55_14_arena7.csv \n",
      "Condition: no_food_females \n",
      "\n",
      "Iteration: 39 \n",
      "Experiment: video_2019-12-18T11_55_14_arena8.csv \n",
      "Condition: no_food_females \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>has_food</th>\n",
       "      <th>aggression_latency</th>\n",
       "      <th>aggression_latency_mins</th>\n",
       "      <th>nframes</th>\n",
       "      <th>nbouts</th>\n",
       "      <th>ratio_frames</th>\n",
       "      <th>ratio_bouts</th>\n",
       "      <th>condition</th>\n",
       "      <th>experiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>1771.0</td>\n",
       "      <td>0.491944</td>\n",
       "      <td>504</td>\n",
       "      <td>5</td>\n",
       "      <td>0.028000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena1.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>2032.0</td>\n",
       "      <td>0.564444</td>\n",
       "      <td>2112</td>\n",
       "      <td>13</td>\n",
       "      <td>0.117333</td>\n",
       "      <td>2.6</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena10.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>5507.0</td>\n",
       "      <td>1.529722</td>\n",
       "      <td>1340</td>\n",
       "      <td>11</td>\n",
       "      <td>0.074444</td>\n",
       "      <td>2.2</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena11.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>7035.0</td>\n",
       "      <td>1.954167</td>\n",
       "      <td>1784</td>\n",
       "      <td>8</td>\n",
       "      <td>0.099111</td>\n",
       "      <td>1.6</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena12.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>5045.0</td>\n",
       "      <td>1.401389</td>\n",
       "      <td>3045</td>\n",
       "      <td>7</td>\n",
       "      <td>0.169167</td>\n",
       "      <td>1.4</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena13.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena16.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena3.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena4.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena7.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>-16636.0</td>\n",
       "      <td>-4.621111</td>\n",
       "      <td>37</td>\n",
       "      <td>4</td>\n",
       "      <td>0.002056</td>\n",
       "      <td>0.8</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena8.csv</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>129 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     has_aggression  has_food  aggression_latency  aggression_latency_mins  \\\n",
       "0              True      True              1771.0                 0.491944   \n",
       "1              True      True              2032.0                 0.564444   \n",
       "2              True      True              5507.0                 1.529722   \n",
       "3              True      True              7035.0                 1.954167   \n",
       "4              True      True              5045.0                 1.401389   \n",
       "..              ...       ...                 ...                      ...   \n",
       "124           False     False                 NaN                 0.000000   \n",
       "125           False     False                 NaN                 0.000000   \n",
       "126           False     False                 NaN                 0.000000   \n",
       "127           False     False                 NaN                 0.000000   \n",
       "128            True     False            -16636.0                -4.621111   \n",
       "\n",
       "     nframes  nbouts  ratio_frames  ratio_bouts          condition  \\\n",
       "0        504       5      0.028000          1.0  food_mating_pairs   \n",
       "1       2112      13      0.117333          2.6  food_mating_pairs   \n",
       "2       1340      11      0.074444          2.2  food_mating_pairs   \n",
       "3       1784       8      0.099111          1.6  food_mating_pairs   \n",
       "4       3045       7      0.169167          1.4  food_mating_pairs   \n",
       "..       ...     ...           ...          ...                ...   \n",
       "124        0       0      0.000000          0.0    no_food_females   \n",
       "125        0       0      0.000000          0.0    no_food_females   \n",
       "126        0       0      0.000000          0.0    no_food_females   \n",
       "127        0       0      0.000000          0.0    no_food_females   \n",
       "128       37       4      0.002056          0.8    no_food_females   \n",
       "\n",
       "                                experiment  \n",
       "0     video_2019-11-27T10_50_09_arena1.csv  \n",
       "1    video_2019-11-27T10_50_09_arena10.csv  \n",
       "2    video_2019-11-27T10_50_09_arena11.csv  \n",
       "3    video_2019-11-27T10_50_09_arena12.csv  \n",
       "4    video_2019-11-27T10_50_09_arena13.csv  \n",
       "..                                     ...  \n",
       "124  video_2019-12-18T11_55_14_arena16.csv  \n",
       "125   video_2019-12-18T11_55_14_arena3.csv  \n",
       "126   video_2019-12-18T11_55_14_arena4.csv  \n",
       "127   video_2019-12-18T11_55_14_arena7.csv  \n",
       "128   video_2019-12-18T11_55_14_arena8.csv  \n",
       "\n",
       "[129 rows x 10 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "aggression_df = pd.DataFrame()\n",
    "for condition in experiments.keys():\n",
    "    for h, experiment_path in enumerate(experiments[condition]):\n",
    "\n",
    "        experiment = os.path.basename(experiment_path)\n",
    "        \n",
    "        print('Iteration:', h, '\\nExperiment:', experiment, '\\nCondition:', condition, '\\n')\n",
    "        \n",
    "        # Exclude experiments without copulation (since aggression is only observed during copulation).\n",
    "        annotation_video = annotations.read(experiment_path)\n",
    "        \n",
    "        if 'WT' in experiment_path:\n",
    "            try:\n",
    "                copulation = annotation_video[0].events[0]\n",
    "            except IndexError:\n",
    "                continue\n",
    "            # Consider aggression only during the first 5 minutes of copulation.\n",
    "            aggression_events = list(filter(lambda event: event.time < (copulation.time + 18000), annotation_video[1].events))\n",
    "        else:\n",
    "            try:\n",
    "                arena_start = annotation_video[0].events[0].time\n",
    "            except IndexError:\n",
    "                continue\n",
    "            # Get aggression only from minute 5 to minute 10.\n",
    "            aggression_events = []\n",
    "            for event in annotation_video[1].events:\n",
    "                if (event.time >= (arena_start + 5 * 60 * FPS) and event.time < (arena_start + 10 * 60 * FPS)):\n",
    "                    aggression_events.append(event)\n",
    "\n",
    "        n_events = len(aggression_events)\n",
    "\n",
    "        # In case there is aggression, do the necessary calculations.\n",
    "        if n_events > 0:\n",
    "            \n",
    "            aggression_latency =  aggression_events[0].time - copulation.time\n",
    "            aggression_latency_mins = aggression_latency / (60 * FPS)\n",
    "            \n",
    "            ratio_frames = sum([aggression.duration for aggression in aggression_events]) / (5 * 60 * FPS)\n",
    "            ratio_bouts = n_events / 5\n",
    "            \n",
    "            aggression_data = pd.DataFrame({'has_aggression': True,\n",
    "                                            'has_food': False if 'no_food' in condition else True,\n",
    "                                            'aggression_latency': aggression_latency,\n",
    "                                            'aggression_latency_mins': aggression_latency_mins,\n",
    "                                            'nframes': sum([aggression.duration for aggression in aggression_events]),\n",
    "                                            'nbouts': n_events,\n",
    "                                            'ratio_frames': ratio_frames,\n",
    "                                            'ratio_bouts': ratio_bouts,\n",
    "                                            'condition': condition,\n",
    "                                            'experiment': experiment},\n",
    "                                            index=[h],\n",
    "                                           )\n",
    "\n",
    "        # If not, preset our dictionary with default values.\n",
    "        else:\n",
    "            aggression_data = pd.DataFrame({'has_aggression': False,\n",
    "                                            'has_food': False if 'no_food' in condition else True,\n",
    "                                            'aggression_latency': np.nan,\n",
    "                                            'aggression_latency_mins': 0,\n",
    "                                            'nframes': 0,\n",
    "                                            'nbouts': 0,\n",
    "                                            'ratio_frames': 0, \n",
    "                                            'ratio_bouts': 0,\n",
    "                                            'condition': condition,\n",
    "                                            'experiment': experiment},\n",
    "                                            index=[h],\n",
    "                                           )\n",
    "\n",
    "        # Concatenate all data together.\n",
    "        aggression_df = pd.concat([aggression_df, aggression_data], ignore_index=True)\n",
    "\n",
    "aggression_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Outlier Detection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t food_mating_pairs \n",
      "\n",
      "[]\n",
      "Number data points considered outliers: 0\n",
      "Percent data points considered outliers: 0.0 %\n",
      "\n",
      "\t no_food_mating_pairs \n",
      "\n",
      "[]\n",
      "Number data points considered outliers: 0\n",
      "Percent data points considered outliers: 0.0 %\n",
      "\n",
      "\t food_females \n",
      "\n",
      "[60, 66]\n",
      "Number data points considered outliers: 2\n",
      "Percent data points considered outliers: 5.128 %\n",
      "\n",
      "\t no_food_females \n",
      "\n",
      "[97]\n",
      "Number data points considered outliers: 1\n",
      "Percent data points considered outliers: 2.5 %\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>has_food</th>\n",
       "      <th>aggression_latency</th>\n",
       "      <th>aggression_latency_mins</th>\n",
       "      <th>nframes</th>\n",
       "      <th>nbouts</th>\n",
       "      <th>ratio_frames</th>\n",
       "      <th>ratio_bouts</th>\n",
       "      <th>condition</th>\n",
       "      <th>experiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>1771.0</td>\n",
       "      <td>0.491944</td>\n",
       "      <td>504</td>\n",
       "      <td>5</td>\n",
       "      <td>0.028000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena1.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>2032.0</td>\n",
       "      <td>0.564444</td>\n",
       "      <td>2112</td>\n",
       "      <td>13</td>\n",
       "      <td>0.117333</td>\n",
       "      <td>2.6</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena10.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>5507.0</td>\n",
       "      <td>1.529722</td>\n",
       "      <td>1340</td>\n",
       "      <td>11</td>\n",
       "      <td>0.074444</td>\n",
       "      <td>2.2</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena11.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>7035.0</td>\n",
       "      <td>1.954167</td>\n",
       "      <td>1784</td>\n",
       "      <td>8</td>\n",
       "      <td>0.099111</td>\n",
       "      <td>1.6</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena12.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>5045.0</td>\n",
       "      <td>1.401389</td>\n",
       "      <td>3045</td>\n",
       "      <td>7</td>\n",
       "      <td>0.169167</td>\n",
       "      <td>1.4</td>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>video_2019-11-27T10_50_09_arena13.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena16.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>125</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena3.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena4.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena7.csv</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>-16636.0</td>\n",
       "      <td>-4.621111</td>\n",
       "      <td>37</td>\n",
       "      <td>4</td>\n",
       "      <td>0.002056</td>\n",
       "      <td>0.8</td>\n",
       "      <td>no_food_females</td>\n",
       "      <td>video_2019-12-18T11_55_14_arena8.csv</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>126 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     has_aggression  has_food  aggression_latency  aggression_latency_mins  \\\n",
       "0              True      True              1771.0                 0.491944   \n",
       "1              True      True              2032.0                 0.564444   \n",
       "2              True      True              5507.0                 1.529722   \n",
       "3              True      True              7035.0                 1.954167   \n",
       "4              True      True              5045.0                 1.401389   \n",
       "..              ...       ...                 ...                      ...   \n",
       "124           False     False                 NaN                 0.000000   \n",
       "125           False     False                 NaN                 0.000000   \n",
       "126           False     False                 NaN                 0.000000   \n",
       "127           False     False                 NaN                 0.000000   \n",
       "128            True     False            -16636.0                -4.621111   \n",
       "\n",
       "     nframes  nbouts  ratio_frames  ratio_bouts          condition  \\\n",
       "0        504       5      0.028000          1.0  food_mating_pairs   \n",
       "1       2112      13      0.117333          2.6  food_mating_pairs   \n",
       "2       1340      11      0.074444          2.2  food_mating_pairs   \n",
       "3       1784       8      0.099111          1.6  food_mating_pairs   \n",
       "4       3045       7      0.169167          1.4  food_mating_pairs   \n",
       "..       ...     ...           ...          ...                ...   \n",
       "124        0       0      0.000000          0.0    no_food_females   \n",
       "125        0       0      0.000000          0.0    no_food_females   \n",
       "126        0       0      0.000000          0.0    no_food_females   \n",
       "127        0       0      0.000000          0.0    no_food_females   \n",
       "128       37       4      0.002056          0.8    no_food_females   \n",
       "\n",
       "                                experiment  \n",
       "0     video_2019-11-27T10_50_09_arena1.csv  \n",
       "1    video_2019-11-27T10_50_09_arena10.csv  \n",
       "2    video_2019-11-27T10_50_09_arena11.csv  \n",
       "3    video_2019-11-27T10_50_09_arena12.csv  \n",
       "4    video_2019-11-27T10_50_09_arena13.csv  \n",
       "..                                     ...  \n",
       "124  video_2019-12-18T11_55_14_arena16.csv  \n",
       "125   video_2019-12-18T11_55_14_arena3.csv  \n",
       "126   video_2019-12-18T11_55_14_arena4.csv  \n",
       "127   video_2019-12-18T11_55_14_arena7.csv  \n",
       "128   video_2019-12-18T11_55_14_arena8.csv  \n",
       "\n",
       "[126 rows x 10 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "corrected_ratio_frames = pd.DataFrame()\n",
    "\n",
    "for condition in experiments.keys():\n",
    "\n",
    "    print('\\n\\t', condition, '\\n')\n",
    "\n",
    "    try:\n",
    "        dataset = aggression_df.query('condition==\"' + condition + '\"')['ratio_frames']\n",
    "\n",
    "        outlier_positions = helpers.check_outliers(dataset)\n",
    "        print(outlier_positions)\n",
    "\n",
    "        fresh_dataset = pd.DataFrame(helpers.remove_outliers(dataset, indices=outlier_positions))\n",
    "        fresh_dataset['condition'] = condition\n",
    "\n",
    "        corrected_ratio_frames = pd.concat([corrected_ratio_frames, fresh_dataset], axis=0)\n",
    "        \n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "\n",
    "aggression_df = aggression_df.loc[corrected_ratio_frames.index]\n",
    "aggression_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Amount of Aggressive Bouts / Minute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>condition</th>\n",
       "      <th>ratio_bouts</th>\n",
       "      <th>has_food</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>1.0</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>2.6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>2.2</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>1.6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>food_mating_pairs</td>\n",
       "      <td>1.4</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           condition  ratio_bouts  has_food\n",
       "0  food_mating_pairs          1.0      True\n",
       "1  food_mating_pairs          2.6      True\n",
       "2  food_mating_pairs          2.2      True\n",
       "3  food_mating_pairs          1.6      True\n",
       "4  food_mating_pairs          1.4      True"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ratio_bouts_df = aggression_df.copy()[['condition', 'ratio_bouts', 'has_food']]\n",
    "ratio_bouts_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t no_food_mating_pairs \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.000006\n",
      "  All groups were sampled from populations with NOT IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 4.356698097461346e-08 \n",
      "\n",
      "\n",
      "\t food_females \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.000233\n",
      "  All groups were sampled from populations with NOT IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 2.097984968103677e-05 \n",
      "\n",
      "\n",
      "\t no_food_females \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS NOT normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.000104\n",
      "  All groups were sampled from populations with NOT IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 4.125665265748104e-07 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'no_food_mating_pairs': 4.356698097461346e-08,\n",
       " 'food_females': 2.097984968103677e-05,\n",
       " 'no_food_females': 4.125665265748104e-07}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ratio_bouts_pvalues = {}\n",
    "\n",
    "control = ratio_bouts_df.query('condition==\"food_mating_pairs\"')['ratio_bouts']\n",
    "\n",
    "for condition in list(experiments.keys())[1:]:\n",
    "\n",
    "    print('\\n\\t', condition, '\\n')\n",
    "\n",
    "    try:\n",
    "        test = ratio_bouts_df.query('condition==\"' + condition + '\"')['ratio_bouts']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_condition = helpers.run_statistics(temp_values)\n",
    "\n",
    "        ratio_bouts_pvalues[condition] = pvalue_condition\n",
    "        \n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "    \n",
    "ratio_bouts_pvalues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bonferroni Correction\n",
      "---------------------\n",
      "\n",
      "\tOriginal Values:\n",
      " {'no_food_mating_pairs': 4.356698097461346e-08, 'food_females': 2.097984968103677e-05, 'no_food_females': 4.125665265748104e-07}\n",
      "\n",
      "\tCorrected Values:\n",
      " {'no_food_mating_pairs': 1.307009429238404e-07, 'food_females': 6.293954904311031e-05, 'no_food_females': 1.2376995797244312e-06} \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Bonferroni corretction for multiple comparisons.\n",
    "title = 'Bonferroni Correction'\n",
    "print(title)\n",
    "print('-'*len(title))\n",
    "\n",
    "# Show uncorrected values.\n",
    "print('\\n\\tOriginal Values:\\n', ratio_bouts_pvalues)\n",
    "\n",
    "# Apply the bonferroni correction for multiple comparisons.\n",
    "bouts_multi_comp_correction = multipletests(pvals=list(ratio_bouts_pvalues.values()), alpha=0.05, method='bonferroni')[1]\n",
    "\n",
    "# Transform the correction results into a dictionary.\n",
    "corrected_bouts_pvalues = dict(zip(list(ratio_bouts_pvalues.keys()), bouts_multi_comp_correction))\n",
    "\n",
    "# Show corrected values.\n",
    "print('\\n\\tCorrected Values:\\n', corrected_bouts_pvalues, '\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "no_food_mating_pairs\n",
      "Large Efect: -1.0 \n",
      "\n",
      "food_females\n",
      "Medium Effect: -0.7142857142857143 \n",
      "\n",
      "no_food_females\n",
      "Large Efect: -0.8571428571428572 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'no_food_mating_pairs': -1.0,\n",
       " 'food_females': -0.7142857142857143,\n",
       " 'no_food_females': -0.8571428571428572}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ratio_bouts_effect_sizes = {}\n",
    "\n",
    "control = ratio_bouts_df.query('condition==\"food_mating_pairs\"')['ratio_bouts']\n",
    "\n",
    "for condition in list(experiments.keys())[1:]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = ratio_bouts_df.query('condition==\"' + condition +'\"')['ratio_bouts']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "\n",
    "    ratio_bouts_effect_sizes[condition] = median_diff\n",
    "    \n",
    "ratio_bouts_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = ratio_bouts_df['condition'].nunique()\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='ratio_bouts',\n",
    "            data=ratio_bouts_df,\n",
    "            order=list(experiments.keys()),\n",
    "            palette=['steelblue'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='ratio_bouts',\n",
    "              data=ratio_bouts_df,\n",
    "              order=list(experiments.keys()),\n",
    "              palette=['steelblue'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('virgin females', labelpad=100)\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('# Bouts / Minute of Copulation')\n",
    "axis.set_ylim(0, 5)\n",
    "axis.set_yticks(np.arange(0, 5+0.01, 1))\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(ratio_bouts_df.query('condition==\"'+condition+'\"').shape[0]) for condition in list(experiments.keys())]\n",
    "row2 = ['+', '+', '-', '-']\n",
    "row3 = ['+', '-', '+', '-']\n",
    "cell_text = np.array([row1, row2, row3])\n",
    "\n",
    "row_labels = ['n =', 'Copulating male', 'Food odour']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='right',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "table_cell_ids = properties['celld']\n",
    "for cell_id, cell in zip(table_cell_ids, table_cells):\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "    cell_row = cell_id[0]\n",
    "    cell_col = cell_id[1]\n",
    "    if cell_row > 0 and cell_col > -1:\n",
    "        cell.set_fontsize(16)\n",
    "\n",
    "# Draw statistical result.\n",
    "for p, condition in enumerate(list(experiments.keys())[1:]):\n",
    "    sig_height = 6 if (corrected_bouts_pvalues.get(condition, 'NaN') == 'NaN') or (corrected_bouts_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=corrected_bouts_pvalues.get(condition, 'NaN'),\n",
    "                                 y=4.5,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'nbouts_aggression_normalized_first_5mins_mating_pairs_females_combined'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
